
//过滤数组中的唯一元素
/**
 * 创建一个函数 unique(arr)，该函数返回一个由 arr 中所有唯一元素所组成的数组。
 * @param arr 一个数组
 */
function unique(arr){
    return Array.from(new Set(arr));
}

let values = ["Hare", "Krishna", "Hare", "Krishna",
    "Krishna", "Krishna", "Hare", "Hare", ":-O"
];

// console.table( unique(values) ); // Hare, Krishna, :-O


//过滤字谜（anagrams）

/**
 Anagrams 是具有相同数量相同字母但是顺序不同的单词。
 例如：
 nap - pan
 ear - are - era
 cheaters - hectares - teachers
 写一个函数 aclean(arr)，它返回被清除了字谜（anagrams）的数组。
 例如：
 * @param arr
 */
function aclean(arr){

    // let map = new Map();
    // for (let word of arr) {
    //     // 将单词 split 成字母，对字母进行排序，之后再 join 回来
    //     let sorted = word
    //         .toLowerCase()
    //         .split('')
    //         .sort()
    //         .join(''); // (*)
    //     map.set(sorted, word);
    // }
    //
    // return Array.from(map.values());
    let obj = {};

    for (let i = 0; i < arr.length; i++) {
        let sorted = arr[i].toLowerCase().split("").sort().join("");
        obj[sorted] = arr[i];
    }

    return Object.values(obj);
}

let arr = ["nap", "teachers", "cheaters", "PAN", "ear", "era", "hectares"];

// console.table( aclean(arr) );

//迭代键
/*
*
我们期望使用 map.keys() 得到一个数组，然后使用特定的方法例如 .push 等，对其进行处理。

但是运行不了：

let map = new Map();

map.set("name", "John");

let keys = map.keys();

keys.push("more");// Error: keys.push is not a function
* */

/**
 * 原因：map.keys()返回的是一个可迭代对象，不是一个数组，所以如果想使用push，可以使用Array.form方法转换为数组。
 */